//package com.ply.flashsalessystem.config;
//
//import com.fasterxml.jackson.core.JsonGenerator;
//import com.fasterxml.jackson.core.JsonParser;
//import com.fasterxml.jackson.core.JsonProcessingException;
//import com.fasterxml.jackson.databind.*;
//import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.core.convert.converter.Converter;
//
//import java.io.IOException;
//import java.text.SimpleDateFormat;
//import java.util.Date;
//
///**
// * @description 日期转换配置 解决@RequestAttribute、@RequestParam和@RequestBody三种类型的时间类型参数接收与转换问题
// * @date 2022/01/13
// */
//@Configuration
//public class DateConfig {
//    /**
//     * 默认日期时间格式
//     */
//    public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
//
//    /**
//     * Date转换器，用于转换RequestParam和PathVariable参数
//     */
//    @Bean
//    public Converter<String, Date> dateConverter() {
//        return new DateConverter();
//    }
//
//    /**
//     * Json序列化和反序列化转换器，用于转换Post请求体中的json以及将我们的对象序列化为返回响应的json
//     * 使用@RequestBody注解的对象中的Date类型将从这里被转换
//     */
//    @Bean
//    public ObjectMapper objectMapper(){
//        ObjectMapper objectMapper = new ObjectMapper();
//        objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
//        objectMapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);
//
//        JavaTimeModule javaTimeModule = new JavaTimeModule();
//
//        //Date序列化和反序列化
//        javaTimeModule.addSerializer(Date.class, new JsonSerializer<Date>() {
//            @Override
//            public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
//                SimpleDateFormat formatter = new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT);
//                String formattedDate = formatter.format(date);
//                jsonGenerator.writeString(formattedDate);
//            }
//        });
//        javaTimeModule.addDeserializer(Date.class, new JsonDeserializer<Date>() {
//            @Override
//            public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
//                return new DateConverter().convert(jsonParser.getText());
//            }
//        });
//
//        objectMapper.registerModule(javaTimeModule);
//        return objectMapper;
//    }
//}
